Wichtig !!! | N E U E S ... | Inhalt | Hotline | Stichwortverzeichnis |
Kapitel 5-1
Der Befehlssatz: & bis @
& | |
Typ: | Operator |
Syntax: | &{<Variable>|<Funktion>} |
Erklärung: | Der Adressoperator ermittelt die Adresse einer Variablen, eines Feldes oder einer Funktion. An dieser Stelle steht: -bei numerischen Einzelvariablen der Wert der Variablen -bei Stringeinzelvariablen ein 4 Byte Pointer auf den eigentlichen String gefolgt von 4 Byte Stringlänge -bei numerischen Feldern ein Pointer auf das eigentliche Feld -bei Stringfeldern ein Pointer auf ein Feld, das die Pointer auf die Elemente des Stringfeldes und deren Längen enthält -bei Funktionen ein Pointer auf die Funktion Um auf die Variable zuzugreifen, können Sie auch den Dereferenz-Operator "*" verwenden. Der Adressoperator kann insbesondere benutzt werden, um Zeiger auf Felder oder Funktionen an Prozeduren bzw. Funktionen zu übergeben. Somit können Felder lokal bearbeitet und Funktionen indirekt aufgerufen werden. "*" greift auf ein Objekt zu (dereferenziert es). Direkt hinter dem Operator muß die Zeigervariable folgen. Welcher Typ gemeint ist, muß auch hier, wie bei einer normalen Variablen, noch mit einem Postfix angegeben werden. Speziell wenn es sich um einen Zeiger auf Funktionen handelt, ruft "*" die Funktion auf, auf die die Zeigervariable zeigt. Hinweis: Der Adressoperator ist sehr wichtig, wenn Sie direkte MAC_OS-Aufrufe machen wollen. Bei vielen dieser Funktionen müssen nämlich Pointer auf Variablen übergeben werden, in denen das MacOS dann die Ergebnisse zurückliefert. Achten Sie dabei unbedingt auf den richtigen Typ, eine automatische Anpassung wie beim OmikronBasic erfolgt beim MacOS nicht. Achtung: Direktes Verwenden oder gar Manipulieren des Zeigers erfordert eine genaue Kenntnis der Speicherverwaltung des Omikron Basics. |
Beispiel: |
Ptr_Text=&Text$ PRINT *Ptr_Text$:'Das $-Zeichen ist wichtig! Summe=0 Ptr_Summe=&Summe N=10 FOR I= 1 TO N *Ptr_Sum=*Ptr_Sum+I*I NEXT I PRINT Summe |
Ergebnis: |
385 |
siehe auch: | VARPTR * (als Pointeroperator) |
(,) | |
Typ: | Operator |
Syntax: | (<Ausdruck>) |
Erklärung: | Ein in Klammern gefaßter Ausdruck hat immer die höchste Priorität und wird vor allen anderen berechnet. Klammerausdrücke können beliebig geschachtelt werden. Man kann die Klammer auch als eine Funktion auffassen, die das Ergebnis von <Ausdruck> als Funtionswert zurückliefert. |
Beispiel: |
PRINT 3*(5+7) |
Ergebnis: |
36 |
siehe auch: | Priorität der Operatoren |
* (als Pointeroperator) | |
Typ: | Operator |
Syntax: | *{<Variable>|<Funktion>} |
Erklärung: | Um den Pointeroperator verwenden zu können, müssen Sie zunächst mit dem Adressoperator "&"
die Adresse eines Objekts (Variable, Feld oder Funktion) ermitteln. Der Ausdruck 'Ptr_Str_Cmp=&FN Cmp(A$, B$)'
speichert in der Variablen 'Ptr_Str_Cmp' einen Zeiger auf die Funktion 'FN Cmp(,)', also deren Adresse. Mit diesem
Zeiger kann die Funktion nun indirekt aufgerufen werden (z.b. 'PRINT FN *Ptr_Str_Cmp("A","B")').
Solche Funktionszeiger können ebenso wie Zeiger auf ein Feld an Prozeduren übergeben werden. Mit oberem Beispiel wäre eine Sortier-Prozedur denkbar, die zum Stringvergleich lediglich einen Funktionszeiger übergeben bekommt. Abhängig von der Vergleichsfunktion wird nach ganz unterschiedlichen Kriterien sortiert (z.B. aufsteigend, absteigend oder groß=klein ...) Wichtig: Achten Sie auf die genaue Übereinstimmung der Parameterlisten von Funktionen, die über Zeiger aufgerufen werden. Das Compilat kann zur Laufzeit keine Typanpassung vornehmen, da nicht bekannt ist auf welche Funktion der Zeiger gerade verweist. Im oberen Beispiel dürfen Sie 'FN *Ptr_To_Df_Fn' nur mit einem Double-Float als Parameter aufrufen (hier X#). Die normalerweise notwendige Konvertierung von Integer nach Double-Float kann nicht automatisch erfolgen, der Integer-Parameter würde falsch übergeben werden. |
Beispiel: |
Ptr=&FN Sin2#(X#) PRINT "Wertetabelle von Sinusquadrat:" :PRINT Werte_Tab Ptr,0#,PI,0.2# SCREEN 1,80,80,320,400 |
Ergebnis: |
|
siehe auch: | & VARPTR |
* (als Multiplikationsoperator) | |
Typ: | Operator |
Syntax: | {<num.Ausdruck>|<String-Ausdruck>}*<num.Ausdruck> |
Erklärung: | Der Multiplikationsoperator multipliziert den Ausdruck, der links von ihm steht, mit dem numerischen Ausdruck, der rechts von ihm steht. Auf der linken Seite kann statt des numerischen Ausdrucks auch ein String-Ausdruck eingesetzt werden. |
Beispiel: |
PRINT "Basic"*3 |
Ergebnis: |
BasicBasicBasic |
siehe auch: | / \ STRING$ SPACE$ SPC MAT *(als Pointeroperator) |
+ (als Vorzeichen) | |
Typ: | Operator |
Syntax: | + <num.Ausdruck> |
Erklärung: | Der positive Vorzeichenoperator zeigt an, daß es sich bei dem numerischen Ausdruck um eine positive Zahl handelt. Der "+"-Operator wirkt wie eine Multiplikation mit 1, ändert den Wert der Zahl also nicht. Er kann daher im allgemeinen weggelassen werden. Omikron Basic verwendent bei der Ausgabe von Zahlen statt des "+"-Zeichens ein Leerzeichen. Dieses Verhalten kann mit USING aber geändert werden. |
Beispiel: | |
Ergebnis: | |
siehe auch: | + - (als Vorzeichen) |
+ | |
Typ: | Operator |
Syntax: | {<num.Ausdruck> + <num.Ausdruck> | <String-Ausdruck> + <String-Ausdruck>} |
Erklärung: | Der Additionsoperator addiert den Ausdruck, der links von ihm steht, zu dem Ausdruck, der rechts von ihm steht. Statt der numerischen Ausdrücke können auch String-Ausdrücke eingesetzt werden, eine Kombination von beiden ist aber nicht erlaubt. |
Beispiel: |
PRINT "Omikron"+"Basic "+"Version 6" |
Ergebnis: |
OmikronBasic Version 6 |
siehe auch: | - + (als Vorzeichen) MAT |
- (als Vorzeichen) | |
Typ: | Operator |
Syntax: | - <num.Ausdruck> |
Erklärung: | Der negative Vorzeichenoperator zeigt an, daß es sich bei dem numerischen Ausdruck um eine negative Zahl handelt. Der "-"-Operator wirkt wie eine Multiplikation mit -1, negiert den Wert der Zahl also. Der Operator ist zu sich selbst invers. Eine zweimalige Anwendung erzeugt daher wieder die ursprüngliche Zahl. |
Beispiel: |
PRINT -A,-(-A+1) |
Ergebnis: |
|
siehe auch: | - + (als Vorzeichen) |
- | |
Typ: | Operator |
Syntax: | <num.Ausdruck> - <num.Ausdruck> |
Erklärung: | Der Subtraktionsoperator subtrahiert den Ausdruck, der rechts von ihm steht, von dem Ausdruck, der links von ihm steht. Es sind nur numerische Ausdrücke, aber keine String-Ausdrücke, erlaubt. |
Beispiel: | |
Ergebnis: | |
siehe auch: | + - (als Vorzeichen) MAT |
/ | |
Typ: | Operator |
Syntax: | <num.Ausdruck> / <num.Ausdruck> |
Erklärung: | Der Divisionsoperator dividiert den Ausdruck, der links von ihm steht, durch den Ausdruck, der rechts von ihm steht. Es sind nur numerische Ausdrücke, aber keine String-Ausdrücke, erlaubt. |
Beispiel: | |
Ergebnis: | |
siehe auch: | \ * MAT |
\ | |
Typ: | Operator |
Syntax: | <num.Ausdruck> \ <num.Ausdruck> |
Erklärung: | Der ganzzahlige Divisionsoperator dividiert den Ausdruck, der links von ihm steht, durch den Ausdruck, der rechts von ihm steht. Es sind nur numerische Ausdrücke, aber keine String-Ausdrücke, erlaubt. Im Unterschied zu dem normalen Divisionsoperator wird als Ergebnis immer eine Integerzahl zurückgeliefert. Wenn die Division also nicht aufgeht, wird das Ergebnis auf die nächstkleinere ganze Zahl abgerundet. |
Beispiel: |
|
Ergebnis: |
|
siehe auch: | / * MOD |
^ | |
Typ: | Operator |
Syntax: | <num.Ausdruck> ^ <num.Ausdruck> |
Erklärung: | Der Potenzoperator erhebt den Ausdruck, der links von ihm steht, in die Potenz, die durch den Ausdruck gegeben
ist, der rechts von ihm steht. Es sind nur numerische Ausdrücke, aber keine String-Ausdrücke, erlaubt. Hinweis: Die Berechnung erfolgt durch eine Reihenentwicklung. Die Operation ist daher im Vergleich zu den Grundrechenarten sehr langsam. Wenn sich die Operation auch als Grundrechenart schreiben läßt, sollten Sie besser diese verwenden (z.B. X*X geht viel schneller als X^2, 1/X ist besser als X^-1, SQR(X) ist schneller als X^0.5) |
Beispiel: | |
Ergebnis: | |
siehe auch: | LOG LN SQR * / |
< | |
Typ: | Operator |
Syntax: | {<num.Ausdruck> < <num.Ausdruck> | <String-Ausdruck> < <String-Ausdruck>} |
Erklärung: | Der Kleineroperator vergleicht den Ausdruck, der links von ihm steht, mit dem Ausdruck, der rechts von ihm steht.
Statt der numerischen Ausdrücke können auch String-Ausdrücke eingesetzt werden, eine Kombination
von beiden ist aber nicht erlaubt. Das Ergebnis ist ein boolscher Wert. Ist der Ausdruck links vom Operator kleiner
als der Ausdruck rechts vom Operator, so wird -1 als Ergebnis zurückgeliefert, sonst 0. Bei Strings erfolgt der Vergleich zeichenweise nach dem jeweiligen ASCII-Wert des Zeichens. "a" ist demnach kleiner als "b". Die Strings können auch unterschiedlich lang sein. Hinweis: Solche Vergleiche benutzt man im allgemeinen zur Programmsteuerung mit Strukturbefehlen wie IF, WHILE, UNTIL. |
Beispiel: | |
Ergebnis: | |
siehe auch: | <= = >= > <> |
<= | |
Typ: | Operator |
Syntax: | {<num.Ausdruck> <= <num.Ausdruck> | <String-Ausdruck> <= <String-Ausdruck>} |
Erklärung: | Der Kleinergleichoperator vergleicht den Ausdruck, der links von ihm steht, mit dem Ausdruck, der rechts von ihm
steht. Statt der numerischen Ausdrücke können auch String-Ausdrücke eingesetzt werden, eine Kombination
von beiden ist aber nicht erlaubt. Das Ergebnis ist ein boolscher Wert. Ist der Ausdruck links vom Operator kleiner
als oder gleich dem Ausdruck rechts vom Operator, so wird -1 als Ergebnis zurückgeliefert, sonst 0.
Bei Strings erfolgt der Vergleich zeichenweise nach dem jeweiligen ASCII-Wert des Zeichens. "a" ist demnach kleinergleich "b". Die Strings können auch unterschiedlich lang sein. Hinweis: Solche Vergleiche benutzt man im allgemeinen zur Programmsteuerung mit Strukturbefehlen wie IF, WHILE, UNTIL. |
Beispiel: | |
Ergebnis: | |
siehe auch: | < = >= > <> |
= | |
Typ: | Operator |
Syntax: | {<num.Ausdruck> = <num.Ausdruck> | <String-Ausdruck> = <String-Ausdruck>} |
Erklärung: | Der Vergleichsoperator vergleicht den Ausdruck, der links von ihm steht, mit dem Ausdruck, der rechts von ihm steht.
Statt der numerischen Ausdrücke können auch String-Ausdrücke eingesetzt werden, eine Kombination
von beiden ist aber nicht erlaubt. Das Ergebnis ist ein boolscher Wert. Ist der Ausdruck links vom Operator gleich
dem Ausdruck rechts vom Operator, so wird -1 als Ergebnis zurückgeliefert, sonst 0. Bei Strings erfolgt der Vergleich zeichenweise nach dem jeweiligen ASCII-Wert des Zeichens. "a" ist demnach gleich "a". Die Strings können auch unterschiedlich lang sein. Dann ist das Ergebnis aber immer 0. Hinweis: Solche Vergleiche benutzt man im allgemeinen zur Programmsteuerung mit Strukturbefehlen wie IF, WHILE, UNTIL. |
Beispiel: | |
Ergebnis: | |
siehe auch: | < <= >= > <> |
>= | |
Typ: | Operator |
Syntax: | {<num.Ausdruck> >= <num.Ausdruck> | <String-Ausdruck> >= <String-Ausdruck>} |
Erklärung: | Der Größergleichoperator vergleicht den Ausdruck, der links von ihm steht, mit dem Ausdruck, der rechts
von ihm steht. Statt der numerischen Ausdrücke können auch String-Ausdrücke eingesetzt werden, eine
Kombination von beiden ist aber nicht erlaubt. Das Ergebnis ist ein boolscher Wert. Ist der Ausdruck links vom
Operator größer als oder gleich dem Ausdruck rechts vom Operator, so wird -1 als Ergebnis zurückgeliefert,
sonst 0. Bei Strings erfolgt der Vergleich zeichenweise nach dem jeweiligen ASCII-Wert des Zeichens. "b" ist demnach größergleich "a". Hinweis: Solche Vergleiche benutzt man im allgemeinen zur Programmsteuerung mit Strukturbefehlen wie IF, WHILE, UNTIL. |
Beispiel: | |
Ergebnis: | |
siehe auch: | < <= = > <> |
> | |
Typ: | Operator |
Syntax: | {<num.Ausdruck> > <num.Ausdruck> | <String-Ausdruck> > <String-Ausdruck>} |
Erklärung: | Der Größeroperator vergleicht den Ausdruck, der links von ihm steht, mit dem Ausdruck, der rechts von
ihm steht. Statt der numerischen Ausdrücke können auch String-Ausdrücke eingesetzt werden, eine
Kombination von beiden ist aber nicht erlaubt. Das Ergebnis ist ein boolscher Wert. Ist der Ausdruck links vom
Operator größer als der Ausdruck rechts vom Operator, so wird -1 als Ergebnis zurückgeliefert,
sonst 0. Bei Strings erfolgt der Vergleich zeichenweise nach dem jeweiligen ASCII-Wert des Zeichens. "b" ist demnach größer als "a". Hinweis: Solche Vergleiche benutzt man im allgemeinen zur Programmsteuerung mit Strukturbefehlen wie IF, WHILE, UNTIL. |
Beispiel: | |
Ergebnis: | |
siehe auch: | < <= = >= <> |
<> | |
Typ: | Operator |
Syntax: | {<num.Ausdruck> <> <num.Ausdruck> | <String-Ausdruck> <> <String-Ausdruck>} |
Erklärung: | Der Ungleichoperator vergleicht den Ausdruck, der links von ihm steht, mit dem Ausdruck, der rechts von ihm steht.
Statt der numerischen Ausdrücke können auch String-Ausdrücke eingesetzt werden, eine Kombination
von beiden ist aber nicht erlaubt. Das Ergebnis ist ein boolscher Wert. Ist der Ausdruck links vom Operator ungleich
dem Ausdruck rechts vom Operator, so wird -1 als Ergebnis zurückgeliefert, sonst 0. Bei Strings erfolgt der Vergleich zeichenweise nach dem jeweiligen ASCII-Wert des Zeichens. "a" ist demnach ungleich "A". Die Strings können auch unterschiedlich lang sein. Dann ist das Ergebnis aber immer 0. Hinweis: Solche Vergleiche benutzt man im allgemeinen zur Programmsteuerung mit Strukturbefehlen wie IF, WHILE, UNTIL. |
Beispiel: | |
Ergebnis: | |
siehe auch: | < <= = >= > |
= (als Zuweisung) | |
Typ: | Befehl |
Syntax: | {<num.Variable> = <num.Ausdruck>|<Stringvariable> = <String-Ausdruck>} |
Erklärung: | Der Zuweisungsoperator weist der Variablen links vom Operator den Ausdruck rechts vom Operator zu. Numerischen Variablen kann nur ein numerischer Ausdruck zugewiesen werden und Stringvariablen nur ein String-Ausdruck. Eine Kombination von beiden ist unzulässig. |
Beispiel: | |
Ergebnis: | |
siehe auch: | LET |
+= | |
Typ: | Operator |
Syntax: | <num.Variable> += <num.Ausdruck> |
Erklärung: | Dieser Operator addiert zu einer numerischen Variablen einen numerischen Ausdruck und weist das Ergebnis dann gleich
wieder der Variablen zu. A+=B ist also gleichbedeutend mit A=A+B, kann aber vom Compiler effektiver übersetzt
werden. Sie sollten von dieser Schreibweise also reichlich gebrauch machen. Hinweis: Der Omikron Basic Compiler versucht immer, einen Ausdruck der Form A=A+B wie A+=B zu übersetzen. Trotzdem ist die Benutzung des "+=" Operators anzuraten. |
Beispiel: | |
Ergebnis: | |
siehe auch: | -= *= /= |
-= | |
Typ: | Operator |
Syntax: | <num.Variable> -= <num.Ausdruck> |
Erklärung: | Dieser Operator subtrahiert von einer numerischen Variablen einen numerischen Ausdruck und weist das Ergebnis dann
gleich wieder der Variablen zu. A-=B ist also gleichbedeutend mit A=A-B, kann aber vom Compiler effektiver übersetzt
werden. Sie sollten von dieser Schreibweise also reichlich gebrauch machen. Hinweis: Der Omikron Basic Compiler versucht immer, einen Ausdruck der Form A=A-B wie A-=B zu übersetzen. Trotzdem ist die Benutzung des "-=" Operators anzuraten. |
Beispiel: | |
Ergebnis: | |
siehe auch: | += *= /= |
*= | |
Typ: | Operator |
Syntax: | <num.Variable> *= <num.Ausdruck> |
Erklärung: | Dieser Operator multipliziert eine numerische Variable mit einem numerischen Ausdruck und weist das Ergebnis dann
gleich wieder der Variablen zu. A*=B ist also gleichbedeutend mit A=A*B, kann aber vom Compiler effektiver übersetzt
werden. Sie sollten von dieser Schreibweise also reichlich gebrauch machen. Hinweis: Der Omikron Basic Compiler versucht immer, einen Ausdruck der Form A=A*B wie A*=B zu übersetzen. Trotzdem ist die Benutzung des "*=" Operators anzuraten. |
Beispiel: | |
Ergebnis: | |
siehe auch: | += -= /= |
/= | |
Typ: | Operator |
Syntax: | <num.Variable> /= <num.Ausdruck> |
Erklärung: | Dieser Operator dividiert eine numerische Variable durch einem numerischen Ausdruck und weist das Ergebnis dann
gleich wieder der Variablen zu. A/=B ist also gleichbedeutend mit A=A/B, kann aber vom Compiler effektiver übersetzt
werden. Sie sollten von dieser Schreibweise also reichlich gebrauch machen. Hinweis: Der Omikron Basic Compiler versucht immer, einen Ausdruck der Form A=A/B wie A/=B zu übersetzen. Trotzdem ist die Benutzung des "/=" Operators anzuraten. |
Beispiel: | |
Ergebnis: | |
siehe auch: | += -= *= |
{...} | |
Typ: | Befehl |
Syntax: | {<Programmtext>} |
Erklärung: | Ein in geschweifte Klammern eingefaßter Bereich im Quellcode kann mit der Editorfunktion 'Bereich Einklappen' zu einer einzigen Zeile zusammengefaßt werden. Der Befehl hat keinen Einfluß auf die Programmausführung und wird vom Compiler ignoriert. |
Beispiel: | |
Ergebnis: | |
siehe auch: | Bereich einklappen Bereich ausklappen Alles ausklappen |
? | |
Typ: | Befehl |
Syntax: | ? [[<Ausdruck>][,[[<Ausdruck>]<,|;>]...] Für Ausdruck kann jeweils eingesetzt werden: {TAB(<num.Ausdruck>) | USING [<String-Ausdruck>] | <num.Ausdruck> | <String-Ausdruck>} |
Erklärung: | Das Fragezeichen hat die gleiche Bedeutung wie der Befehl PRINT. Es wird vom Editor auch sofort nach Verlassen der Zeile in PRINT umgewandelt. |
Beispiel: | |
Ergebnis: | |
siehe auch: |
' (Kommentar) | |
Typ: | Befehl |
Syntax: | ' <Stringkonstante> |
Erklärung: | Mit dem Hochkomma wird ein Kommentar eingeleitet. Alles, was hinter dem Hochkomma steht, wird vom Compiler ignoriert. Sie sollten von der Möglichkeit, Erläuterungen in Ihr Programm einzufügen, reichlich Gebrauch machen. Dadurch ist es für Sie einfacher, den Programmablauf auch dann noch zu verstehen, wenn Sie sich längere Zeit nicht damit beschäftigt haben. |
Beispiel: | |
Ergebnis: | |
siehe auch: | REM |
|
@ |
Typ: | Funktion |
Syntax: | @(<num.Ausdruck>,<num.Ausdruck) @(<Zeile>,<Spalte>) |
Erklärung: | Diese Funktion liefert einen Steuerstring als Ergebnis zurück. Wird dieser String z.B. mit PRINT,
LPRINT oder INPUT ausgegeben, so bewirkt er, daß
der Cursor in die hinter "@" angegebene Zeile und Spalte gesetzt wird. Bei LPRINT kann es dabei zu gewissen Einschränkungen kommen, denn der Cursor kann natülich nicht an eine Stelle gesetzt werden, die bereits ausgedruckt wurde. |
Beispiel: | |
Ergebnis: | |
siehe auch: | PRINT @ |
Grundlagen blättern
ABS - CINT